5
תגובות
התחלתי להשתמש בלארוול וניסיתי להבין איך עובדת שם הטעינה האוטומטית. בסופו של דבר, קומפוזר מייצר קובץ ענק עם נתיבים של מחלקות (כרגע 1,500 שורות). ואני חושב על זה שבכל בקשה זה נטען למחלקת ClassLoader (אני מניח), ואני לא מבין למה זה לא מבוסס יותר על מרחבי שמות. אני מבין למה צריך כמה נתיבים - כי לא כל מרחבי השמות מתחילים מאותו מקום. יש את vendor וכאלה, אבל למה ככה?

5 תשובות

avatar ענה intval ב 29 ליולי 2014 #

באופן כללי אם אתה מפעיל את קומפוזר עם הפרמטר optimize הוא יוצר נתיבים ישירים לקבצים בתוך קובץ ה autoloading
אם אתה מפעיל אותו בלעדיו, הוא מתבסס על ניימספייסים ו psr0
הגרסה עם הנתיבים הישירים מהירה יותר לביצוע בזכות זה, שיש צורך בפחות קריאות דיסק (לבדוק שתיקיה קיימת ובתוכה עוד תיקיה קיימת ובתוכה קיים קובץ וכו') ובזכות זה שהקובץ ממילא עובר דרך opcode cache ואין צורך לפענח אותו כל פעם מחדש.

avatar ענה OrelBeY ב 29 ליולי 2014 #

אבל הוא לוקח מלא זיכרון. ועוד לכל בקשה בנפרד.

avatar ענה intval ב 29 ליולי 2014 #

כשאתה אומר הוא לוקח, אתה מתכוון לזה שצריך לטעון עוד 100 קילובייט של קוד לזיכרון של השרת?
ראשית, ה-opcode cache שומר את הקובץ אצלו ולכן אין באמת צורך לטעון במובן המלא של לקרוא ולפענח את הקוד שוב בכל בקשה.
שנית, בדרך כלל קריאה מדיסק היא פעולה יותר כבדה והראשונה שמגיעה ללימיט של השרת, לכן לפעמים מעדיפים trade of לטובת זיכרון.

avatar ענה OrelBeY ב 29 ליולי 2014 #

לא ידעתי שקריאה מדיסק היא כזאת כבדה.

תודה. :)

avatar ענה intval ב 29 ליולי 2014 #

זו אחת הפעולות הכי כבדות שהמחשבים שלנו עושים. גישה לדיסק (כולל SSD) היא נורא נורא איטית במונחי משחב.